/*
  内置方法/函数：

      print();

  自定义方法：
      自定义方法的基本格式：

      返回类型  方法名称（参数1，参数2,...）{
        方法体
        return 返回值;
      }
*/

int getNum() {
  var myNum = 123;
  return myNum;
}

void main() {
  var n = getNum();
  print(n);

  print('---------------');

  int sumNum(int n) {
    var sum = 0;
    for (var i = 0; i <= n; i++) {
      sum += i;
    }
    return sum;
  }

  ;

  var j = sumNum(100);
  print(j);

  print('---------------');

  String printUserInfo(String username, [String sex = '男', int? age]) {
    if (age != null) {
      return "姓名：$username, 性别：$sex, 年龄：$age";
    }
    return "姓名：$username, 性别：$sex, 年龄保密";
  }

  print(printUserInfo('臭猪君', '女'));

  print('--------命名参数-------');

  String printMmUserInfo(String username, {required int age, String? sex}) {
    if (age != null) {
      return "姓名：$username, 性别：$sex, 年龄：$age";
    }
    return "姓名：$username, 性别：$sex, 年龄保密";
  }

  print(printMmUserInfo('香猪君', age: 12));

  print('--------方法当做参数-------');

  fn1() {
    print('fn1');
  }

  fn2(fn) {
    fn();
  }

  fn2(fn1);

  print('--------匿名方法-------');

  var fn = () {
    print('匿名方法');
  };

  fn();

  print('--------函数相互调用-------');

  bool isEvenNumber(int n) {
    if (n % 2 == 0) {
      return true;
    }
    return false;
  }

  printNum(int n) {
    for (var i = 1; i <= n; i++) {
      if (isEvenNumber(i)) {
        print(i);
      }
    }
  }

  printNum(10);
}
